package com.ticorp.salmofood.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.ticorp.salmofood.common.Constantes;
import com.ticorp.salmofood.common.ConstantesView;
import com.ticorp.salmofood.service.BusquedasLotesService;
import com.ticorp.salmofood.viewmodel.BusquedasLotesCommand;
import com.ticorp.salmofood.web.bean.BeanUsuario;

public class LoginController extends MultiActionController {
    private static final Log logger = LogFactory.getLog(LoginController.class);

    // INYECCION DE DEPENDENCIAS busquedasLotesService
    private BusquedasLotesService busquedasLotesService;

    public BusquedasLotesService getBusquedasLotesService() {
	return busquedasLotesService;
    }

    public void setBusquedasLotesService(
	    BusquedasLotesService busquedasLotesService) {
	this.busquedasLotesService = busquedasLotesService;
    }

    // ABRIR PAGINA DE LOGIN
    public ModelAndView irLogin(HttpServletRequest request,
	    HttpServletResponse response) {
	return new ModelAndView(ConstantesView.VIEW_LOGIN);
    }

    // LOGIN DE USUARIOS
    public ModelAndView login(HttpServletRequest request,
	    HttpServletResponse response) {
	String user = null;
	String password = null;

	HttpSession session = null;

	user = request.getParameter("txt_login_username"); // username
	password = request.getParameter("txt_login_password"); // password

	String pagina = "";
	ModelAndView retorno = null;

	session = request.getSession(true);
	BeanUsuario beanUsuario = new BeanUsuario();

	// USUARIO INTERNO
	if ("pepito".equals(user) && "123456".equals(password)) {
	    beanUsuario.setTipoUsuario("interno");
	    beanUsuario.setNombres("Pepito");
	    beanUsuario.setApellidos("Perez Loquillo");
	    beanUsuario.setUsuario(user);
	    beanUsuario.setPassword(password);
	    session.setAttribute("usuario", beanUsuario);

	    // OBTEBNER LISTA DE CLIENTES,PAISES Y REGIONES
	    List listaClientes = getBusquedasLotesService().getListaClientes();
	    List listaPaises = getBusquedasLotesService().getListaPaises();
	    List listaRegiones = getBusquedasLotesService().getListaRegiones();

	    Map model = new HashMap();
	    BusquedasLotesCommand command = new BusquedasLotesCommand();
	    command.setClientes(listaClientes);
	    command.setPaises(listaPaises);
	    command.setRegiones(listaRegiones);

	    command.setQryLFvisible("nodisplay"); // iniciar la grilla LF no
						  // visible
	    command.setQryLNFvisible("nodisplay"); // iniciar la grilla LNF no
						   // visible
	    command.setQryDCvisible("nodisplay"); // iniciar la grilla DC no
						  // visible
	    command.setChk_LF("checked"); // iniciar el radio de LF checked.

	    model.put(Constantes.BUSQUEDAS_LOTES_COMMAND, command);
	    pagina = ConstantesView.VIEW_BUSQUEDAS_LOTES;

	    retorno = new ModelAndView(pagina, model);

	    // USUARIO EXTERNO (CLIENTE)
	} else if ("pepin".equals(user) && "654321".equals(password)) {
	    beanUsuario.setTipoUsuario("externo");
	    beanUsuario.setNombres("Pepin");
	    beanUsuario.setApellidos("Perez Loquin");
	    beanUsuario.setUsuario(user);
	    beanUsuario.setPassword(password);
	    session.setAttribute("usuario", beanUsuario);

	    // OBTEBNER LISTA DE CLIENTES,PAISES Y REGIONES
	    List listaClientes = getBusquedasLotesService().getListaClientes();
	    List listaPaises = getBusquedasLotesService().getListaPaises();
	    List listaRegiones = getBusquedasLotesService().getListaRegiones();

	    Map model = new HashMap();
	    BusquedasLotesCommand command = new BusquedasLotesCommand();
	    command.setClientes(listaClientes);
	    command.setPaises(listaPaises);
	    command.setRegiones(listaRegiones);

	    command.setQryLFvisible("nodisplay"); // iniciar la grilla LF no
						  // visible
	    command.setQryLNFvisible("nodisplay"); // iniciar la grilla LNF no
						   // visible
	    command.setQryDCvisible("nodisplay"); // iniciar la grilla DC no
						  // visible
	    command.setChk_LF("checked"); // iniciar el radio de LF checked

	    model.put(Constantes.BUSQUEDAS_LOTES_COMMAND, command);
	    pagina = ConstantesView.VIEW_BUSQUEDAS_LOTES;

	    retorno = new ModelAndView(pagina, model);

	} else {
	    pagina = ConstantesView.VIEW_LOGIN;
	    retorno = new ModelAndView(pagina);
	    retorno.addObject("mensajeError",
		    "*usuario y/o password incorrectos");
	}

	return retorno;
    }

    // LOGOUT DE USUARIOS
    public ModelAndView logout(HttpServletRequest request,
	    HttpServletResponse response) throws Exception {
	logger.debug("========== LOGOUT DE USUARIOS ==========");
	request.getSession().invalidate(); // destruir session

	return new ModelAndView(ConstantesView.VIEW_LOGIN);

    }
    
    // ACCESO PROHIBIDO
    public ModelAndView prohibido(HttpServletRequest request,
	    HttpServletResponse response) throws Exception {
	logger.debug("========== ACCESO PROHIBIDO ==========");
	request.getSession().invalidate(); // destruir session

	return new ModelAndView(ConstantesView.VIEW_PROHIBIDO);

    }

}
